home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / locale.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  39KB  |  1,383 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import sys
  5. import encodings
  6. import encodings.aliases as encodings
  7. __all__ = [
  8.     'getlocale',
  9.     'getdefaultlocale',
  10.     'getpreferredencoding',
  11.     'Error',
  12.     'setlocale',
  13.     'resetlocale',
  14.     'localeconv',
  15.     'strcoll',
  16.     'strxfrm',
  17.     'str',
  18.     'atof',
  19.     'atoi',
  20.     'format',
  21.     'format_string',
  22.     'currency',
  23.     'normalize',
  24.     'LC_CTYPE',
  25.     'LC_COLLATE',
  26.     'LC_TIME',
  27.     'LC_MONETARY',
  28.     'LC_NUMERIC',
  29.     'LC_ALL',
  30.     'CHAR_MAX']
  31.  
  32. try:
  33.     from _locale import *
  34. except ImportError:
  35.     CHAR_MAX = 127
  36.     LC_ALL = 6
  37.     LC_COLLATE = 3
  38.     LC_CTYPE = 0
  39.     LC_MESSAGES = 5
  40.     LC_MONETARY = 4
  41.     LC_NUMERIC = 1
  42.     LC_TIME = 2
  43.     Error = ValueError
  44.     
  45.     def localeconv():
  46.         return {
  47.             'grouping': [
  48.                 127],
  49.             'currency_symbol': '',
  50.             'n_sign_posn': 127,
  51.             'p_cs_precedes': 127,
  52.             'n_cs_precedes': 127,
  53.             'mon_grouping': [],
  54.             'n_sep_by_space': 127,
  55.             'decimal_point': '.',
  56.             'negative_sign': '',
  57.             'positive_sign': '',
  58.             'p_sep_by_space': 127,
  59.             'int_curr_symbol': '',
  60.             'p_sign_posn': 127,
  61.             'thousands_sep': '',
  62.             'mon_thousands_sep': '',
  63.             'frac_digits': 127,
  64.             'mon_decimal_point': '',
  65.             'int_frac_digits': 127 }
  66.  
  67.     
  68.     def setlocale(category, value = None):
  69.         if value not in (None, '', 'C'):
  70.             raise Error, '_locale emulation only supports "C" locale'
  71.         
  72.         return 'C'
  73.  
  74.     
  75.     def strcoll(a, b):
  76.         return cmp(a, b)
  77.  
  78.     
  79.     def strxfrm(s):
  80.         return s
  81.  
  82.  
  83.  
  84. def _group(s, monetary = False):
  85.     conv = localeconv()
  86.     if not monetary or 'mon_thousands_sep':
  87.         pass
  88.     thousands_sep = conv['thousands_sep']
  89.     if not monetary or 'mon_grouping':
  90.         pass
  91.     grouping = conv['grouping']
  92.     if not grouping:
  93.         return (s, 0)
  94.     
  95.     result = ''
  96.     seps = 0
  97.     spaces = ''
  98.     if s[-1] == ' ':
  99.         sp = s.find(' ')
  100.         spaces = s[sp:]
  101.         s = s[:sp]
  102.     
  103.     while s and grouping:
  104.         if grouping[0] == CHAR_MAX:
  105.             break
  106.         elif grouping[0] != 0:
  107.             group = grouping[0]
  108.             grouping = grouping[1:]
  109.         
  110.         if result:
  111.             result = s[-group:] + thousands_sep + result
  112.             seps += 1
  113.         else:
  114.             result = s[-group:]
  115.         s = s[:-group]
  116.         if s and s[-1] not in '0123456789':
  117.             return (s + result + spaces, seps)
  118.             continue
  119.     if not result:
  120.         return (s + spaces, seps)
  121.     
  122.     if s:
  123.         result = s + thousands_sep + result
  124.         seps += 1
  125.     
  126.     return (result + spaces, seps)
  127.  
  128.  
  129. def format(percent, value, grouping = False, monetary = False, *additional):
  130.     if percent[0] != '%':
  131.         raise ValueError('format() must be given exactly one %char format specifier')
  132.     
  133.     if additional:
  134.         formatted = percent % ((value,) + additional)
  135.     else:
  136.         formatted = percent % value
  137.     if percent[-1] in 'eEfFgG':
  138.         seps = 0
  139.         parts = formatted.split('.')
  140.         if grouping:
  141.             (parts[0], seps) = _group(parts[0], monetary = monetary)
  142.         
  143.         if not monetary or 'mon_decimal_point':
  144.             pass
  145.         decimal_point = localeconv()['decimal_point']
  146.         formatted = decimal_point.join(parts)
  147.         while seps:
  148.             sp = formatted.find(' ')
  149.             if sp == -1:
  150.                 break
  151.             
  152.             formatted = formatted[:sp] + formatted[sp + 1:]
  153.             seps -= 1
  154.     elif percent[-1] in 'diu':
  155.         if grouping:
  156.             formatted = _group(formatted, monetary = monetary)[0]
  157.         
  158.     
  159.     return formatted
  160.  
  161. import re
  162. import operator
  163. _percent_re = re.compile('%(?:\\((?P<key>.*?)\\))?(?P<modifiers>[-#0-9 +*.hlL]*?)[eEfFgGdiouxXcrs%]')
  164.  
  165. def format_string(f, val, grouping = False):
  166.     percents = list(_percent_re.finditer(f))
  167.     new_f = _percent_re.sub('%s', f)
  168.     if isinstance(val, tuple):
  169.         new_val = list(val)
  170.         i = 0
  171.         for perc in percents:
  172.             starcount = perc.group('modifiers').count('*')
  173.             new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i + 1:i + 1 + starcount])
  174.             del new_val[i + 1:i + 1 + starcount]
  175.             i += 1 + starcount
  176.         
  177.         val = tuple(new_val)
  178.     elif operator.isMappingType(val):
  179.         for perc in percents:
  180.             key = perc.group('key')
  181.             val[key] = format(perc.group(), val[key], grouping)
  182.         
  183.     else:
  184.         val = format(percents[0].group(), val, grouping)
  185.     return new_f % val
  186.  
  187.  
  188. def currency(val, symbol = True, grouping = False, international = False):
  189.     conv = localeconv()
  190.     if not international or 'int_frac_digits':
  191.         pass
  192.     digits = conv['frac_digits']
  193.     if digits == 127:
  194.         raise ValueError("Currency formatting is not possible using the 'C' locale.")
  195.     
  196.     s = format('%%.%if' % digits, abs(val), grouping, monetary = True)
  197.     s = '<' + s + '>'
  198.     if symbol:
  199.         if not international or 'int_curr_symbol':
  200.             pass
  201.         smb = conv['currency_symbol']
  202.         if not val < 0 or 'n_cs_precedes':
  203.             pass
  204.         precedes = conv['p_cs_precedes']
  205.         if not val < 0 or 'n_sep_by_space':
  206.             pass
  207.         separated = conv['p_sep_by_space']
  208.         s = None + s if precedes else '' + smb
  209.     
  210.     if not val < 0 or 'n_sign_posn':
  211.         pass
  212.     sign_pos = conv['p_sign_posn']
  213.     if not val < 0 or 'negative_sign':
  214.         pass
  215.     sign = conv['positive_sign']
  216.     if sign_pos == 0:
  217.         s = '(' + s + ')'
  218.     elif sign_pos == 1:
  219.         s = sign + s
  220.     elif sign_pos == 2:
  221.         s = s + sign
  222.     elif sign_pos == 3:
  223.         s = s.replace('<', sign)
  224.     elif sign_pos == 4:
  225.         s = s.replace('>', sign)
  226.     else:
  227.         s = sign + s
  228.     return s.replace('<', '').replace('>', '')
  229.  
  230.  
  231. def str(val):
  232.     return format('%.12g', val)
  233.  
  234.  
  235. def atof(string, func = float):
  236.     ts = localeconv()['thousands_sep']
  237.     if ts:
  238.         string = string.replace(ts, '')
  239.     
  240.     dd = localeconv()['decimal_point']
  241.     if dd:
  242.         string = string.replace(dd, '.')
  243.     
  244.     return func(string)
  245.  
  246.  
  247. def atoi(str):
  248.     return atof(str, int)
  249.  
  250.  
  251. def _test():
  252.     setlocale(LC_ALL, '')
  253.     s1 = format('%d', 123456789, 1)
  254.     print s1, 'is', atoi(s1)
  255.     s1 = str(3.14)
  256.     print s1, 'is', atof(s1)
  257.  
  258. _setlocale = setlocale
  259.  
  260. def normalize(localename):
  261.     fullname = localename.lower()
  262.     if ':' in fullname:
  263.         fullname = fullname.replace(':', '.')
  264.     
  265.     if '.' in fullname:
  266.         (langname, encoding) = fullname.split('.')[:2]
  267.         fullname = langname + '.' + encoding
  268.     else:
  269.         langname = fullname
  270.         encoding = ''
  271.     norm_encoding = encoding.replace('-', '')
  272.     norm_encoding = norm_encoding.replace('_', '')
  273.     lookup_name = langname + '.' + encoding
  274.     code = locale_alias.get(lookup_name, None)
  275.     if code is not None:
  276.         return code
  277.     
  278.     code = locale_alias.get(langname, None)
  279.     if code is not None:
  280.         if '.' in code:
  281.             (langname, defenc) = code.split('.')
  282.         else:
  283.             langname = code
  284.             defenc = ''
  285.         if encoding:
  286.             norm_encoding = encodings.normalize_encoding(encoding)
  287.             norm_encoding = encodings.aliases.aliases.get(norm_encoding, norm_encoding)
  288.             encoding = locale_encoding_alias.get(norm_encoding, norm_encoding)
  289.         else:
  290.             encoding = defenc
  291.         if encoding:
  292.             return langname + '.' + encoding
  293.         else:
  294.             return langname
  295.     else:
  296.         return localename
  297.  
  298.  
  299. def _parse_localename(localename):
  300.     code = normalize(localename)
  301.     if '@' in code:
  302.         (code, modifier) = code.split('@')
  303.         if modifier == 'euro' and '.' not in code:
  304.             return (code, 'iso-8859-15')
  305.         
  306.     
  307.     if '.' in code:
  308.         return tuple(code.split('.')[:2])
  309.     elif code == 'C':
  310.         return (None, None)
  311.     
  312.     raise ValueError, 'unknown locale: %s' % localename
  313.  
  314.  
  315. def _build_localename(localetuple):
  316.     (language, encoding) = localetuple
  317.     if language is None:
  318.         language = 'C'
  319.     
  320.     if encoding is None:
  321.         return language
  322.     else:
  323.         return language + '.' + encoding
  324.  
  325.  
  326. def getdefaultlocale(envvars = ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')):
  327.     
  328.     try:
  329.         import _locale as _locale
  330.         (code, encoding) = _locale._getdefaultlocale()
  331.     except (ImportError, AttributeError):
  332.         pass
  333.  
  334.     if sys.platform == 'win32' and code and code[:2] == '0x':
  335.         code = windows_locale.get(int(code, 0))
  336.     
  337.     return (code, encoding)
  338.     import os as os
  339.     lookup = os.environ.get
  340.     for variable in envvars:
  341.         localename = lookup(variable, None)
  342.         if localename:
  343.             if variable == 'LANGUAGE':
  344.                 localename = localename.split(':')[0]
  345.             
  346.             break
  347.             continue
  348.     else:
  349.         localename = 'C'
  350.     return _parse_localename(localename)
  351.  
  352.  
  353. def getlocale(category = LC_CTYPE):
  354.     localename = _setlocale(category)
  355.     if category == LC_ALL and ';' in localename:
  356.         raise TypeError, 'category LC_ALL is not supported'
  357.     
  358.     return _parse_localename(localename)
  359.  
  360.  
  361. def setlocale(category, locale = None):
  362.     if locale and type(locale) is not type(''):
  363.         locale = normalize(_build_localename(locale))
  364.     
  365.     return _setlocale(category, locale)
  366.  
  367.  
  368. def resetlocale(category = LC_ALL):
  369.     _setlocale(category, _build_localename(getdefaultlocale()))
  370.  
  371. if sys.platform in ('win32', 'darwin', 'mac'):
  372.     
  373.     def getpreferredencoding(do_setlocale = True):
  374.         import _locale
  375.         return _locale._getdefaultlocale()[1]
  376.  
  377. else:
  378.     
  379.     try:
  380.         CODESET
  381.     except NameError:
  382.         
  383.         def getpreferredencoding(do_setlocale = True):
  384.             return getdefaultlocale()[1]
  385.  
  386.  
  387.     
  388.     def getpreferredencoding(do_setlocale = True):
  389.         if do_setlocale:
  390.             oldloc = setlocale(LC_CTYPE)
  391.             setlocale(LC_CTYPE, '')
  392.             result = nl_langinfo(CODESET)
  393.             setlocale(LC_CTYPE, oldloc)
  394.             return result
  395.         else:
  396.             return nl_langinfo(CODESET)
  397.  
  398. locale_encoding_alias = {
  399.     '437': 'C',
  400.     'c': 'C',
  401.     'en': 'ISO8859-1',
  402.     'jis': 'JIS7',
  403.     'jis7': 'JIS7',
  404.     'ajec': 'eucJP',
  405.     'ascii': 'ISO8859-1',
  406.     'latin_1': 'ISO8859-1',
  407.     'iso8859_1': 'ISO8859-1',
  408.     'iso8859_10': 'ISO8859-10',
  409.     'iso8859_11': 'ISO8859-11',
  410.     'iso8859_13': 'ISO8859-13',
  411.     'iso8859_14': 'ISO8859-14',
  412.     'iso8859_15': 'ISO8859-15',
  413.     'iso8859_2': 'ISO8859-2',
  414.     'iso8859_3': 'ISO8859-3',
  415.     'iso8859_4': 'ISO8859-4',
  416.     'iso8859_5': 'ISO8859-5',
  417.     'iso8859_6': 'ISO8859-6',
  418.     'iso8859_7': 'ISO8859-7',
  419.     'iso8859_8': 'ISO8859-8',
  420.     'iso8859_9': 'ISO8859-9',
  421.     'iso2022_jp': 'JIS7',
  422.     'shift_jis': 'SJIS',
  423.     'tactis': 'TACTIS',
  424.     'euc_jp': 'eucJP',
  425.     'euc_kr': 'eucKR',
  426.     'utf_8': 'UTF8',
  427.     'koi8_r': 'KOI8-R',
  428.     'koi8_u': 'KOI8-U' }
  429. locale_alias = {
  430.     'a3': 'a3_AZ.KOI8-C',
  431.     'a3_az': 'a3_AZ.KOI8-C',
  432.     'a3_az.koi8c': 'a3_AZ.KOI8-C',
  433.     'af': 'af_ZA.ISO8859-1',
  434.     'af_za': 'af_ZA.ISO8859-1',
  435.     'af_za.iso88591': 'af_ZA.ISO8859-1',
  436.     'am': 'am_ET.UTF-8',
  437.     'american': 'en_US.ISO8859-1',
  438.     'american.iso88591': 'en_US.ISO8859-1',
  439.     'ar': 'ar_AA.ISO8859-6',
  440.     'ar_aa': 'ar_AA.ISO8859-6',
  441.     'ar_aa.iso88596': 'ar_AA.ISO8859-6',
  442.     'ar_ae': 'ar_AE.ISO8859-6',
  443.     'ar_bh': 'ar_BH.ISO8859-6',
  444.     'ar_dz': 'ar_DZ.ISO8859-6',
  445.     'ar_eg': 'ar_EG.ISO8859-6',
  446.     'ar_eg.iso88596': 'ar_EG.ISO8859-6',
  447.     'ar_iq': 'ar_IQ.ISO8859-6',
  448.     'ar_jo': 'ar_JO.ISO8859-6',
  449.     'ar_kw': 'ar_KW.ISO8859-6',
  450.     'ar_lb': 'ar_LB.ISO8859-6',
  451.     'ar_ly': 'ar_LY.ISO8859-6',
  452.     'ar_ma': 'ar_MA.ISO8859-6',
  453.     'ar_om': 'ar_OM.ISO8859-6',
  454.     'ar_qa': 'ar_QA.ISO8859-6',
  455.     'ar_sa': 'ar_SA.ISO8859-6',
  456.     'ar_sa.iso88596': 'ar_SA.ISO8859-6',
  457.     'ar_sd': 'ar_SD.ISO8859-6',
  458.     'ar_sy': 'ar_SY.ISO8859-6',
  459.     'ar_tn': 'ar_TN.ISO8859-6',
  460.     'ar_ye': 'ar_YE.ISO8859-6',
  461.     'arabic': 'ar_AA.ISO8859-6',
  462.     'arabic.iso88596': 'ar_AA.ISO8859-6',
  463.     'az': 'az_AZ.ISO8859-9E',
  464.     'az_az': 'az_AZ.ISO8859-9E',
  465.     'az_az.iso88599e': 'az_AZ.ISO8859-9E',
  466.     'be': 'be_BY.CP1251',
  467.     'be_by': 'be_BY.CP1251',
  468.     'be_by.cp1251': 'be_BY.CP1251',
  469.     'be_by.microsoftcp1251': 'be_BY.CP1251',
  470.     'bg': 'bg_BG.CP1251',
  471.     'bg_bg': 'bg_BG.CP1251',
  472.     'bg_bg.cp1251': 'bg_BG.CP1251',
  473.     'bg_bg.iso88595': 'bg_BG.ISO8859-5',
  474.     'bg_bg.koi8r': 'bg_BG.KOI8-R',
  475.     'bg_bg.microsoftcp1251': 'bg_BG.CP1251',
  476.     'bokmal': 'nb_NO.ISO8859-1',
  477.     'bokm\xe5l': 'nb_NO.ISO8859-1',
  478.     'br': 'br_FR.ISO8859-1',
  479.     'br_fr': 'br_FR.ISO8859-1',
  480.     'br_fr.iso88591': 'br_FR.ISO8859-1',
  481.     'br_fr.iso885914': 'br_FR.ISO8859-14',
  482.     'br_fr.iso885915': 'br_FR.ISO8859-15',
  483.     'br_fr@euro': 'br_FR.ISO8859-15',
  484.     'bulgarian': 'bg_BG.CP1251',
  485.     'c': 'C',
  486.     'c-french': 'fr_CA.ISO8859-1',
  487.     'c-french.iso88591': 'fr_CA.ISO8859-1',
  488.     'c.en': 'C',
  489.     'c.iso88591': 'en_US.ISO8859-1',
  490.     'c_c': 'C',
  491.     'c_c.c': 'C',
  492.     'ca': 'ca_ES.ISO8859-1',
  493.     'ca_es': 'ca_ES.ISO8859-1',
  494.     'ca_es.iso88591': 'ca_ES.ISO8859-1',
  495.     'ca_es.iso885915': 'ca_ES.ISO8859-15',
  496.     'ca_es@euro': 'ca_ES.ISO8859-15',
  497.     'catalan': 'ca_ES.ISO8859-1',
  498.     'cextend': 'en_US.ISO8859-1',
  499.     'cextend.en': 'en_US.ISO8859-1',
  500.     'chinese-s': 'zh_CN.eucCN',
  501.     'chinese-t': 'zh_TW.eucTW',
  502.     'croatian': 'hr_HR.ISO8859-2',
  503.     'cs': 'cs_CZ.ISO8859-2',
  504.     'cs_cs': 'cs_CZ.ISO8859-2',
  505.     'cs_cs.iso88592': 'cs_CZ.ISO8859-2',
  506.     'cs_cz': 'cs_CZ.ISO8859-2',
  507.     'cs_cz.iso88592': 'cs_CZ.ISO8859-2',
  508.     'cy': 'cy_GB.ISO8859-1',
  509.     'cy_gb': 'cy_GB.ISO8859-1',
  510.     'cy_gb.iso88591': 'cy_GB.ISO8859-1',
  511.     'cy_gb.iso885914': 'cy_GB.ISO8859-14',
  512.     'cy_gb.iso885915': 'cy_GB.ISO8859-15',
  513.     'cy_gb@euro': 'cy_GB.ISO8859-15',
  514.     'cz': 'cs_CZ.ISO8859-2',
  515.     'cz_cz': 'cs_CZ.ISO8859-2',
  516.     'czech': 'cs_CZ.ISO8859-2',
  517.     'da': 'da_DK.ISO8859-1',
  518.     'da_dk': 'da_DK.ISO8859-1',
  519.     'da_dk.88591': 'da_DK.ISO8859-1',
  520.     'da_dk.885915': 'da_DK.ISO8859-15',
  521.     'da_dk.iso88591': 'da_DK.ISO8859-1',
  522.     'da_dk.iso885915': 'da_DK.ISO8859-15',
  523.     'da_dk@euro': 'da_DK.ISO8859-15',
  524.     'danish': 'da_DK.ISO8859-1',
  525.     'danish.iso88591': 'da_DK.ISO8859-1',
  526.     'dansk': 'da_DK.ISO8859-1',
  527.     'de': 'de_DE.ISO8859-1',
  528.     'de_at': 'de_AT.ISO8859-1',
  529.     'de_at.iso88591': 'de_AT.ISO8859-1',
  530.     'de_at.iso885915': 'de_AT.ISO8859-15',
  531.     'de_at@euro': 'de_AT.ISO8859-15',
  532.     'de_be': 'de_BE.ISO8859-1',
  533.     'de_be.iso88591': 'de_BE.ISO8859-1',
  534.     'de_be.iso885915': 'de_BE.ISO8859-15',
  535.     'de_be@euro': 'de_BE.ISO8859-15',
  536.     'de_ch': 'de_CH.ISO8859-1',
  537.     'de_ch.iso88591': 'de_CH.ISO8859-1',
  538.     'de_ch.iso885915': 'de_CH.ISO8859-15',
  539.     'de_ch@euro': 'de_CH.ISO8859-15',
  540.     'de_de': 'de_DE.ISO8859-1',
  541.     'de_de.88591': 'de_DE.ISO8859-1',
  542.     'de_de.885915': 'de_DE.ISO8859-15',
  543.     'de_de.885915@euro': 'de_DE.ISO8859-15',
  544.     'de_de.iso88591': 'de_DE.ISO8859-1',
  545.     'de_de.iso885915': 'de_DE.ISO8859-15',
  546.     'de_de@euro': 'de_DE.ISO8859-15',
  547.     'de_lu': 'de_LU.ISO8859-1',
  548.     'de_lu.iso88591': 'de_LU.ISO8859-1',
  549.     'de_lu.iso885915': 'de_LU.ISO8859-15',
  550.     'de_lu@euro': 'de_LU.ISO8859-15',
  551.     'deutsch': 'de_DE.ISO8859-1',
  552.     'dutch': 'nl_NL.ISO8859-1',
  553.     'dutch.iso88591': 'nl_BE.ISO8859-1',
  554.     'ee': 'ee_EE.ISO8859-4',
  555.     'ee_ee': 'ee_EE.ISO8859-4',
  556.     'ee_ee.iso88594': 'ee_EE.ISO8859-4',
  557.     'eesti': 'et_EE.ISO8859-1',
  558.     'el': 'el_GR.ISO8859-7',
  559.     'el_gr': 'el_GR.ISO8859-7',
  560.     'el_gr.iso88597': 'el_GR.ISO8859-7',
  561.     'el_gr@euro': 'el_GR.ISO8859-15',
  562.     'en': 'en_US.ISO8859-1',
  563.     'en.iso88591': 'en_US.ISO8859-1',
  564.     'en_au': 'en_AU.ISO8859-1',
  565.     'en_au.iso88591': 'en_AU.ISO8859-1',
  566.     'en_be': 'en_BE.ISO8859-1',
  567.     'en_be@euro': 'en_BE.ISO8859-15',
  568.     'en_bw': 'en_BW.ISO8859-1',
  569.     'en_ca': 'en_CA.ISO8859-1',
  570.     'en_ca.iso88591': 'en_CA.ISO8859-1',
  571.     'en_gb': 'en_GB.ISO8859-1',
  572.     'en_gb.88591': 'en_GB.ISO8859-1',
  573.     'en_gb.iso88591': 'en_GB.ISO8859-1',
  574.     'en_gb.iso885915': 'en_GB.ISO8859-15',
  575.     'en_gb@euro': 'en_GB.ISO8859-15',
  576.     'en_hk': 'en_HK.ISO8859-1',
  577.     'en_ie': 'en_IE.ISO8859-1',
  578.     'en_ie.iso88591': 'en_IE.ISO8859-1',
  579.     'en_ie.iso885915': 'en_IE.ISO8859-15',
  580.     'en_ie@euro': 'en_IE.ISO8859-15',
  581.     'en_in': 'en_IN.ISO8859-1',
  582.     'en_nz': 'en_NZ.ISO8859-1',
  583.     'en_nz.iso88591': 'en_NZ.ISO8859-1',
  584.     'en_ph': 'en_PH.ISO8859-1',
  585.     'en_sg': 'en_SG.ISO8859-1',
  586.     'en_uk': 'en_GB.ISO8859-1',
  587.     'en_us': 'en_US.ISO8859-1',
  588.     'en_us.88591': 'en_US.ISO8859-1',
  589.     'en_us.885915': 'en_US.ISO8859-15',
  590.     'en_us.iso88591': 'en_US.ISO8859-1',
  591.     'en_us.iso885915': 'en_US.ISO8859-15',
  592.     'en_us.iso885915@euro': 'en_US.ISO8859-15',
  593.     'en_us@euro': 'en_US.ISO8859-15',
  594.     'en_us@euro@euro': 'en_US.ISO8859-15',
  595.     'en_za': 'en_ZA.ISO8859-1',
  596.     'en_za.88591': 'en_ZA.ISO8859-1',
  597.     'en_za.iso88591': 'en_ZA.ISO8859-1',
  598.     'en_za.iso885915': 'en_ZA.ISO8859-15',
  599.     'en_za@euro': 'en_ZA.ISO8859-15',
  600.     'en_zw': 'en_ZW.ISO8859-1',
  601.     'eng_gb': 'en_GB.ISO8859-1',
  602.     'eng_gb.8859': 'en_GB.ISO8859-1',
  603.     'english': 'en_EN.ISO8859-1',
  604.     'english.iso88591': 'en_EN.ISO8859-1',
  605.     'english_uk': 'en_GB.ISO8859-1',
  606.     'english_uk.8859': 'en_GB.ISO8859-1',
  607.     'english_united-states': 'en_US.ISO8859-1',
  608.     'english_united-states.437': 'C',
  609.     'english_us': 'en_US.ISO8859-1',
  610.     'english_us.8859': 'en_US.ISO8859-1',
  611.     'english_us.ascii': 'en_US.ISO8859-1',
  612.     'eo': 'eo_XX.ISO8859-3',
  613.     'eo_eo': 'eo_EO.ISO8859-3',
  614.     'eo_eo.iso88593': 'eo_EO.ISO8859-3',
  615.     'eo_xx': 'eo_XX.ISO8859-3',
  616.     'eo_xx.iso88593': 'eo_XX.ISO8859-3',
  617.     'es': 'es_ES.ISO8859-1',
  618.     'es_ar': 'es_AR.ISO8859-1',
  619.     'es_ar.iso88591': 'es_AR.ISO8859-1',
  620.     'es_bo': 'es_BO.ISO8859-1',
  621.     'es_bo.iso88591': 'es_BO.ISO8859-1',
  622.     'es_cl': 'es_CL.ISO8859-1',
  623.     'es_cl.iso88591': 'es_CL.ISO8859-1',
  624.     'es_co': 'es_CO.ISO8859-1',
  625.     'es_co.iso88591': 'es_CO.ISO8859-1',
  626.     'es_cr': 'es_CR.ISO8859-1',
  627.     'es_cr.iso88591': 'es_CR.ISO8859-1',
  628.     'es_do': 'es_DO.ISO8859-1',
  629.     'es_do.iso88591': 'es_DO.ISO8859-1',
  630.     'es_ec': 'es_EC.ISO8859-1',
  631.     'es_ec.iso88591': 'es_EC.ISO8859-1',
  632.     'es_es': 'es_ES.ISO8859-1',
  633.     'es_es.88591': 'es_ES.ISO8859-1',
  634.     'es_es.iso88591': 'es_ES.ISO8859-1',
  635.     'es_es.iso885915': 'es_ES.ISO8859-15',
  636.     'es_es@euro': 'es_ES.ISO8859-15',
  637.     'es_gt': 'es_GT.ISO8859-1',
  638.     'es_gt.iso88591': 'es_GT.ISO8859-1',
  639.     'es_hn': 'es_HN.ISO8859-1',
  640.     'es_hn.iso88591': 'es_HN.ISO8859-1',
  641.     'es_mx': 'es_MX.ISO8859-1',
  642.     'es_mx.iso88591': 'es_MX.ISO8859-1',
  643.     'es_ni': 'es_NI.ISO8859-1',
  644.     'es_ni.iso88591': 'es_NI.ISO8859-1',
  645.     'es_pa': 'es_PA.ISO8859-1',
  646.     'es_pa.iso88591': 'es_PA.ISO8859-1',
  647.     'es_pa.iso885915': 'es_PA.ISO8859-15',
  648.     'es_pa@euro': 'es_PA.ISO8859-15',
  649.     'es_pe': 'es_PE.ISO8859-1',
  650.     'es_pe.iso88591': 'es_PE.ISO8859-1',
  651.     'es_pe.iso885915': 'es_PE.ISO8859-15',
  652.     'es_pe@euro': 'es_PE.ISO8859-15',
  653.     'es_pr': 'es_PR.ISO8859-1',
  654.     'es_pr.iso88591': 'es_PR.ISO8859-1',
  655.     'es_py': 'es_PY.ISO8859-1',
  656.     'es_py.iso88591': 'es_PY.ISO8859-1',
  657.     'es_py.iso885915': 'es_PY.ISO8859-15',
  658.     'es_py@euro': 'es_PY.ISO8859-15',
  659.     'es_sv': 'es_SV.ISO8859-1',
  660.     'es_sv.iso88591': 'es_SV.ISO8859-1',
  661.     'es_sv.iso885915': 'es_SV.ISO8859-15',
  662.     'es_sv@euro': 'es_SV.ISO8859-15',
  663.     'es_us': 'es_US.ISO8859-1',
  664.     'es_uy': 'es_UY.ISO8859-1',
  665.     'es_uy.iso88591': 'es_UY.ISO8859-1',
  666.     'es_uy.iso885915': 'es_UY.ISO8859-15',
  667.     'es_uy@euro': 'es_UY.ISO8859-15',
  668.     'es_ve': 'es_VE.ISO8859-1',
  669.     'es_ve.iso88591': 'es_VE.ISO8859-1',
  670.     'es_ve.iso885915': 'es_VE.ISO8859-15',
  671.     'es_ve@euro': 'es_VE.ISO8859-15',
  672.     'estonian': 'et_EE.ISO8859-1',
  673.     'et': 'et_EE.ISO8859-15',
  674.     'et_ee': 'et_EE.ISO8859-15',
  675.     'et_ee.iso88591': 'et_EE.ISO8859-1',
  676.     'et_ee.iso885913': 'et_EE.ISO8859-13',
  677.     'et_ee.iso885915': 'et_EE.ISO8859-15',
  678.     'et_ee.iso88594': 'et_EE.ISO8859-4',
  679.     'et_ee@euro': 'et_EE.ISO8859-15',
  680.     'eu': 'eu_ES.ISO8859-1',
  681.     'eu_es': 'eu_ES.ISO8859-1',
  682.     'eu_es.iso88591': 'eu_ES.ISO8859-1',
  683.     'eu_es.iso885915': 'eu_ES.ISO8859-15',
  684.     'eu_es@euro': 'eu_ES.ISO8859-15',
  685.     'fa': 'fa_IR.UTF-8',
  686.     'fa_ir': 'fa_IR.UTF-8',
  687.     'fa_ir.isiri3342': 'fa_IR.ISIRI-3342',
  688.     'fi': 'fi_FI.ISO8859-15',
  689.     'fi_fi': 'fi_FI.ISO8859-15',
  690.     'fi_fi.88591': 'fi_FI.ISO8859-1',
  691.     'fi_fi.iso88591': 'fi_FI.ISO8859-1',
  692.     'fi_fi.iso885915': 'fi_FI.ISO8859-15',
  693.     'fi_fi.utf8@euro': 'fi_FI.UTF-8',
  694.     'fi_fi@euro': 'fi_FI.ISO8859-15',
  695.     'finnish': 'fi_FI.ISO8859-1',
  696.     'finnish.iso88591': 'fi_FI.ISO8859-1',
  697.     'fo': 'fo_FO.ISO8859-1',
  698.     'fo_fo': 'fo_FO.ISO8859-1',
  699.     'fo_fo.iso88591': 'fo_FO.ISO8859-1',
  700.     'fo_fo.iso885915': 'fo_FO.ISO8859-15',
  701.     'fo_fo@euro': 'fo_FO.ISO8859-15',
  702.     'fr': 'fr_FR.ISO8859-1',
  703.     'fr_be': 'fr_BE.ISO8859-1',
  704.     'fr_be.88591': 'fr_BE.ISO8859-1',
  705.     'fr_be.iso88591': 'fr_BE.ISO8859-1',
  706.     'fr_be.iso885915': 'fr_BE.ISO8859-15',
  707.     'fr_be@euro': 'fr_BE.ISO8859-15',
  708.     'fr_ca': 'fr_CA.ISO8859-1',
  709.     'fr_ca.88591': 'fr_CA.ISO8859-1',
  710.     'fr_ca.iso88591': 'fr_CA.ISO8859-1',
  711.     'fr_ca.iso885915': 'fr_CA.ISO8859-15',
  712.     'fr_ca@euro': 'fr_CA.ISO8859-15',
  713.     'fr_ch': 'fr_CH.ISO8859-1',
  714.     'fr_ch.88591': 'fr_CH.ISO8859-1',
  715.     'fr_ch.iso88591': 'fr_CH.ISO8859-1',
  716.     'fr_ch.iso885915': 'fr_CH.ISO8859-15',
  717.     'fr_ch@euro': 'fr_CH.ISO8859-15',
  718.     'fr_fr': 'fr_FR.ISO8859-1',
  719.     'fr_fr.88591': 'fr_FR.ISO8859-1',
  720.     'fr_fr.iso88591': 'fr_FR.ISO8859-1',
  721.     'fr_fr.iso885915': 'fr_FR.ISO8859-15',
  722.     'fr_fr@euro': 'fr_FR.ISO8859-15',
  723.     'fr_lu': 'fr_LU.ISO8859-1',
  724.     'fr_lu.88591': 'fr_LU.ISO8859-1',
  725.     'fr_lu.iso88591': 'fr_LU.ISO8859-1',
  726.     'fr_lu.iso885915': 'fr_LU.ISO8859-15',
  727.     'fr_lu@euro': 'fr_LU.ISO8859-15',
  728.     'fran\xe7ais': 'fr_FR.ISO8859-1',
  729.     'fre_fr': 'fr_FR.ISO8859-1',
  730.     'fre_fr.8859': 'fr_FR.ISO8859-1',
  731.     'french': 'fr_FR.ISO8859-1',
  732.     'french.iso88591': 'fr_CH.ISO8859-1',
  733.     'french_france': 'fr_FR.ISO8859-1',
  734.     'french_france.8859': 'fr_FR.ISO8859-1',
  735.     'ga': 'ga_IE.ISO8859-1',
  736.     'ga_ie': 'ga_IE.ISO8859-1',
  737.     'ga_ie.iso88591': 'ga_IE.ISO8859-1',
  738.     'ga_ie.iso885914': 'ga_IE.ISO8859-14',
  739.     'ga_ie.iso885915': 'ga_IE.ISO8859-15',
  740.     'ga_ie@euro': 'ga_IE.ISO8859-15',
  741.     'galego': 'gl_ES.ISO8859-1',
  742.     'galician': 'gl_ES.ISO8859-1',
  743.     'gd': 'gd_GB.ISO8859-1',
  744.     'gd_gb': 'gd_GB.ISO8859-1',
  745.     'gd_gb.iso88591': 'gd_GB.ISO8859-1',
  746.     'gd_gb.iso885914': 'gd_GB.ISO8859-14',
  747.     'gd_gb.iso885915': 'gd_GB.ISO8859-15',
  748.     'gd_gb@euro': 'gd_GB.ISO8859-15',
  749.     'ger_de': 'de_DE.ISO8859-1',
  750.     'ger_de.8859': 'de_DE.ISO8859-1',
  751.     'german': 'de_DE.ISO8859-1',
  752.     'german.iso88591': 'de_CH.ISO8859-1',
  753.     'german_germany': 'de_DE.ISO8859-1',
  754.     'german_germany.8859': 'de_DE.ISO8859-1',
  755.     'gl': 'gl_ES.ISO8859-1',
  756.     'gl_es': 'gl_ES.ISO8859-1',
  757.     'gl_es.iso88591': 'gl_ES.ISO8859-1',
  758.     'gl_es.iso885915': 'gl_ES.ISO8859-15',
  759.     'gl_es@euro': 'gl_ES.ISO8859-15',
  760.     'greek': 'el_GR.ISO8859-7',
  761.     'greek.iso88597': 'el_GR.ISO8859-7',
  762.     'gv': 'gv_GB.ISO8859-1',
  763.     'gv_gb': 'gv_GB.ISO8859-1',
  764.     'gv_gb.iso88591': 'gv_GB.ISO8859-1',
  765.     'gv_gb.iso885914': 'gv_GB.ISO8859-14',
  766.     'gv_gb.iso885915': 'gv_GB.ISO8859-15',
  767.     'gv_gb@euro': 'gv_GB.ISO8859-15',
  768.     'he': 'he_IL.ISO8859-8',
  769.     'he_il': 'he_IL.ISO8859-8',
  770.     'he_il.cp1255': 'he_IL.CP1255',
  771.     'he_il.iso88598': 'he_IL.ISO8859-8',
  772.     'he_il.microsoftcp1255': 'he_IL.CP1255',
  773.     'hebrew': 'iw_IL.ISO8859-8',
  774.     'hebrew.iso88598': 'iw_IL.ISO8859-8',
  775.     'hi': 'hi_IN.ISCII-DEV',
  776.     'hi_in': 'hi_IN.ISCII-DEV',
  777.     'hi_in.isciidev': 'hi_IN.ISCII-DEV',
  778.     'hr': 'hr_HR.ISO8859-2',
  779.     'hr_hr': 'hr_HR.ISO8859-2',
  780.     'hr_hr.iso88592': 'hr_HR.ISO8859-2',
  781.     'hrvatski': 'hr_HR.ISO8859-2',
  782.     'hu': 'hu_HU.ISO8859-2',
  783.     'hu_hu': 'hu_HU.ISO8859-2',
  784.     'hu_hu.iso88592': 'hu_HU.ISO8859-2',
  785.     'hungarian': 'hu_HU.ISO8859-2',
  786.     'icelandic': 'is_IS.ISO8859-1',
  787.     'icelandic.iso88591': 'is_IS.ISO8859-1',
  788.     'id': 'id_ID.ISO8859-1',
  789.     'id_id': 'id_ID.ISO8859-1',
  790.     'in': 'id_ID.ISO8859-1',
  791.     'in_id': 'id_ID.ISO8859-1',
  792.     'is': 'is_IS.ISO8859-1',
  793.     'is_is': 'is_IS.ISO8859-1',
  794.     'is_is.iso88591': 'is_IS.ISO8859-1',
  795.     'is_is.iso885915': 'is_IS.ISO8859-15',
  796.     'is_is@euro': 'is_IS.ISO8859-15',
  797.     'iso-8859-1': 'en_US.ISO8859-1',
  798.     'iso-8859-15': 'en_US.ISO8859-15',
  799.     'iso8859-1': 'en_US.ISO8859-1',
  800.     'iso8859-15': 'en_US.ISO8859-15',
  801.     'iso_8859_1': 'en_US.ISO8859-1',
  802.     'iso_8859_15': 'en_US.ISO8859-15',
  803.     'it': 'it_IT.ISO8859-1',
  804.     'it_ch': 'it_CH.ISO8859-1',
  805.     'it_ch.iso88591': 'it_CH.ISO8859-1',
  806.     'it_ch.iso885915': 'it_CH.ISO8859-15',
  807.     'it_ch@euro': 'it_CH.ISO8859-15',
  808.     'it_it': 'it_IT.ISO8859-1',
  809.     'it_it.88591': 'it_IT.ISO8859-1',
  810.     'it_it.iso88591': 'it_IT.ISO8859-1',
  811.     'it_it.iso885915': 'it_IT.ISO8859-15',
  812.     'it_it@euro': 'it_IT.ISO8859-15',
  813.     'italian': 'it_IT.ISO8859-1',
  814.     'italian.iso88591': 'it_IT.ISO8859-1',
  815.     'iu': 'iu_CA.NUNACOM-8',
  816.     'iu_ca': 'iu_CA.NUNACOM-8',
  817.     'iu_ca.nunacom8': 'iu_CA.NUNACOM-8',
  818.     'iw': 'he_IL.ISO8859-8',
  819.     'iw_il': 'he_IL.ISO8859-8',
  820.     'iw_il.iso88598': 'he_IL.ISO8859-8',
  821.     'ja': 'ja_JP.eucJP',
  822.     'ja.jis': 'ja_JP.JIS7',
  823.     'ja.sjis': 'ja_JP.SJIS',
  824.     'ja_jp': 'ja_JP.eucJP',
  825.     'ja_jp.ajec': 'ja_JP.eucJP',
  826.     'ja_jp.euc': 'ja_JP.eucJP',
  827.     'ja_jp.eucjp': 'ja_JP.eucJP',
  828.     'ja_jp.iso-2022-jp': 'ja_JP.JIS7',
  829.     'ja_jp.iso2022jp': 'ja_JP.JIS7',
  830.     'ja_jp.jis': 'ja_JP.JIS7',
  831.     'ja_jp.jis7': 'ja_JP.JIS7',
  832.     'ja_jp.mscode': 'ja_JP.SJIS',
  833.     'ja_jp.sjis': 'ja_JP.SJIS',
  834.     'ja_jp.ujis': 'ja_JP.eucJP',
  835.     'japan': 'ja_JP.eucJP',
  836.     'japanese': 'ja_JP.eucJP',
  837.     'japanese-euc': 'ja_JP.eucJP',
  838.     'japanese.euc': 'ja_JP.eucJP',
  839.     'japanese.sjis': 'ja_JP.SJIS',
  840.     'jp_jp': 'ja_JP.eucJP',
  841.     'ka': 'ka_GE.GEORGIAN-ACADEMY',
  842.     'ka_ge': 'ka_GE.GEORGIAN-ACADEMY',
  843.     'ka_ge.georgianacademy': 'ka_GE.GEORGIAN-ACADEMY',
  844.     'ka_ge.georgianps': 'ka_GE.GEORGIAN-PS',
  845.     'ka_ge.georgianrs': 'ka_GE.GEORGIAN-ACADEMY',
  846.     'kl': 'kl_GL.ISO8859-1',
  847.     'kl_gl': 'kl_GL.ISO8859-1',
  848.     'kl_gl.iso88591': 'kl_GL.ISO8859-1',
  849.     'kl_gl.iso885915': 'kl_GL.ISO8859-15',
  850.     'kl_gl@euro': 'kl_GL.ISO8859-15',
  851.     'ko': 'ko_KR.eucKR',
  852.     'ko_kr': 'ko_KR.eucKR',
  853.     'ko_kr.euc': 'ko_KR.eucKR',
  854.     'ko_kr.euckr': 'ko_KR.eucKR',
  855.     'korean': 'ko_KR.eucKR',
  856.     'korean.euc': 'ko_KR.eucKR',
  857.     'kw': 'kw_GB.ISO8859-1',
  858.     'kw_gb': 'kw_GB.ISO8859-1',
  859.     'kw_gb.iso88591': 'kw_GB.ISO8859-1',
  860.     'kw_gb.iso885914': 'kw_GB.ISO8859-14',
  861.     'kw_gb.iso885915': 'kw_GB.ISO8859-15',
  862.     'kw_gb@euro': 'kw_GB.ISO8859-15',
  863.     'lithuanian': 'lt_LT.ISO8859-13',
  864.     'lo': 'lo_LA.MULELAO-1',
  865.     'lo_la': 'lo_LA.MULELAO-1',
  866.     'lo_la.cp1133': 'lo_LA.IBM-CP1133',
  867.     'lo_la.ibmcp1133': 'lo_LA.IBM-CP1133',
  868.     'lo_la.mulelao1': 'lo_LA.MULELAO-1',
  869.     'lt': 'lt_LT.ISO8859-13',
  870.     'lt_lt': 'lt_LT.ISO8859-13',
  871.     'lt_lt.iso885913': 'lt_LT.ISO8859-13',
  872.     'lt_lt.iso88594': 'lt_LT.ISO8859-4',
  873.     'lv': 'lv_LV.ISO8859-13',
  874.     'lv_lv': 'lv_LV.ISO8859-13',
  875.     'lv_lv.iso885913': 'lv_LV.ISO8859-13',
  876.     'lv_lv.iso88594': 'lv_LV.ISO8859-4',
  877.     'mi': 'mi_NZ.ISO8859-1',
  878.     'mi_nz': 'mi_NZ.ISO8859-1',
  879.     'mi_nz.iso88591': 'mi_NZ.ISO8859-1',
  880.     'mk': 'mk_MK.ISO8859-5',
  881.     'mk_mk': 'mk_MK.ISO8859-5',
  882.     'mk_mk.cp1251': 'mk_MK.CP1251',
  883.     'mk_mk.iso88595': 'mk_MK.ISO8859-5',
  884.     'mk_mk.microsoftcp1251': 'mk_MK.CP1251',
  885.     'ms': 'ms_MY.ISO8859-1',
  886.     'ms_my': 'ms_MY.ISO8859-1',
  887.     'ms_my.iso88591': 'ms_MY.ISO8859-1',
  888.     'mt': 'mt_MT.ISO8859-3',
  889.     'mt_mt': 'mt_MT.ISO8859-3',
  890.     'mt_mt.iso88593': 'mt_MT.ISO8859-3',
  891.     'nb': 'nb_NO.ISO8859-1',
  892.     'nb_no': 'nb_NO.ISO8859-1',
  893.     'nb_no.88591': 'nb_NO.ISO8859-1',
  894.     'nb_no.iso88591': 'nb_NO.ISO8859-1',
  895.     'nb_no.iso885915': 'nb_NO.ISO8859-15',
  896.     'nb_no@euro': 'nb_NO.ISO8859-15',
  897.     'nl': 'nl_NL.ISO8859-1',
  898.     'nl_be': 'nl_BE.ISO8859-1',
  899.     'nl_be.88591': 'nl_BE.ISO8859-1',
  900.     'nl_be.iso88591': 'nl_BE.ISO8859-1',
  901.     'nl_be.iso885915': 'nl_BE.ISO8859-15',
  902.     'nl_be@euro': 'nl_BE.ISO8859-15',
  903.     'nl_nl': 'nl_NL.ISO8859-1',
  904.     'nl_nl.88591': 'nl_NL.ISO8859-1',
  905.     'nl_nl.iso88591': 'nl_NL.ISO8859-1',
  906.     'nl_nl.iso885915': 'nl_NL.ISO8859-15',
  907.     'nl_nl@euro': 'nl_NL.ISO8859-15',
  908.     'nn': 'nn_NO.ISO8859-1',
  909.     'nn_no': 'nn_NO.ISO8859-1',
  910.     'nn_no.88591': 'nn_NO.ISO8859-1',
  911.     'nn_no.iso88591': 'nn_NO.ISO8859-1',
  912.     'nn_no.iso885915': 'nn_NO.ISO8859-15',
  913.     'nn_no@euro': 'nn_NO.ISO8859-15',
  914.     'no': 'no_NO.ISO8859-1',
  915.     'no@nynorsk': 'ny_NO.ISO8859-1',
  916.     'no_no': 'no_NO.ISO8859-1',
  917.     'no_no.88591': 'no_NO.ISO8859-1',
  918.     'no_no.iso88591': 'no_NO.ISO8859-1',
  919.     'no_no.iso885915': 'no_NO.ISO8859-15',
  920.     'no_no@euro': 'no_NO.ISO8859-15',
  921.     'norwegian': 'no_NO.ISO8859-1',
  922.     'norwegian.iso88591': 'no_NO.ISO8859-1',
  923.     'ny': 'ny_NO.ISO8859-1',
  924.     'ny_no': 'ny_NO.ISO8859-1',
  925.     'ny_no.88591': 'ny_NO.ISO8859-1',
  926.     'ny_no.iso88591': 'ny_NO.ISO8859-1',
  927.     'ny_no.iso885915': 'ny_NO.ISO8859-15',
  928.     'ny_no@euro': 'ny_NO.ISO8859-15',
  929.     'nynorsk': 'nn_NO.ISO8859-1',
  930.     'oc': 'oc_FR.ISO8859-1',
  931.     'oc_fr': 'oc_FR.ISO8859-1',
  932.     'oc_fr.iso88591': 'oc_FR.ISO8859-1',
  933.     'oc_fr.iso885915': 'oc_FR.ISO8859-15',
  934.     'oc_fr@euro': 'oc_FR.ISO8859-15',
  935.     'pd': 'pd_US.ISO8859-1',
  936.     'pd_de': 'pd_DE.ISO8859-1',
  937.     'pd_de.iso88591': 'pd_DE.ISO8859-1',
  938.     'pd_de.iso885915': 'pd_DE.ISO8859-15',
  939.     'pd_de@euro': 'pd_DE.ISO8859-15',
  940.     'pd_us': 'pd_US.ISO8859-1',
  941.     'pd_us.iso88591': 'pd_US.ISO8859-1',
  942.     'pd_us.iso885915': 'pd_US.ISO8859-15',
  943.     'pd_us@euro': 'pd_US.ISO8859-15',
  944.     'ph': 'ph_PH.ISO8859-1',
  945.     'ph_ph': 'ph_PH.ISO8859-1',
  946.     'ph_ph.iso88591': 'ph_PH.ISO8859-1',
  947.     'pl': 'pl_PL.ISO8859-2',
  948.     'pl_pl': 'pl_PL.ISO8859-2',
  949.     'pl_pl.iso88592': 'pl_PL.ISO8859-2',
  950.     'polish': 'pl_PL.ISO8859-2',
  951.     'portuguese': 'pt_PT.ISO8859-1',
  952.     'portuguese.iso88591': 'pt_PT.ISO8859-1',
  953.     'portuguese_brazil': 'pt_BR.ISO8859-1',
  954.     'portuguese_brazil.8859': 'pt_BR.ISO8859-1',
  955.     'posix': 'C',
  956.     'posix-utf2': 'C',
  957.     'pp': 'pp_AN.ISO8859-1',
  958.     'pp_an': 'pp_AN.ISO8859-1',
  959.     'pp_an.iso88591': 'pp_AN.ISO8859-1',
  960.     'pt': 'pt_PT.ISO8859-1',
  961.     'pt_br': 'pt_BR.ISO8859-1',
  962.     'pt_br.88591': 'pt_BR.ISO8859-1',
  963.     'pt_br.iso88591': 'pt_BR.ISO8859-1',
  964.     'pt_br.iso885915': 'pt_BR.ISO8859-15',
  965.     'pt_br@euro': 'pt_BR.ISO8859-15',
  966.     'pt_pt': 'pt_PT.ISO8859-1',
  967.     'pt_pt.88591': 'pt_PT.ISO8859-1',
  968.     'pt_pt.iso88591': 'pt_PT.ISO8859-1',
  969.     'pt_pt.iso885915': 'pt_PT.ISO8859-15',
  970.     'pt_pt.utf8@euro': 'pt_PT.UTF-8',
  971.     'pt_pt@euro': 'pt_PT.ISO8859-15',
  972.     'ro': 'ro_RO.ISO8859-2',
  973.     'ro_ro': 'ro_RO.ISO8859-2',
  974.     'ro_ro.iso88592': 'ro_RO.ISO8859-2',
  975.     'romanian': 'ro_RO.ISO8859-2',
  976.     'ru': 'ru_RU.ISO8859-5',
  977.     'ru_ru': 'ru_RU.ISO8859-5',
  978.     'ru_ru.cp1251': 'ru_RU.CP1251',
  979.     'ru_ru.iso88595': 'ru_RU.ISO8859-5',
  980.     'ru_ru.koi8r': 'ru_RU.KOI8-R',
  981.     'ru_ru.microsoftcp1251': 'ru_RU.CP1251',
  982.     'ru_ua': 'ru_UA.KOI8-U',
  983.     'ru_ua.cp1251': 'ru_UA.CP1251',
  984.     'ru_ua.koi8u': 'ru_UA.KOI8-U',
  985.     'ru_ua.microsoftcp1251': 'ru_UA.CP1251',
  986.     'rumanian': 'ro_RO.ISO8859-2',
  987.     'russian': 'ru_RU.ISO8859-5',
  988.     'se_no': 'se_NO.UTF-8',
  989.     'serbocroatian': 'sh_YU.ISO8859-2',
  990.     'sh': 'sh_YU.ISO8859-2',
  991.     'sh_hr': 'sh_HR.ISO8859-2',
  992.     'sh_hr.iso88592': 'sh_HR.ISO8859-2',
  993.     'sh_sp': 'sh_YU.ISO8859-2',
  994.     'sh_yu': 'sh_YU.ISO8859-2',
  995.     'sk': 'sk_SK.ISO8859-2',
  996.     'sk_sk': 'sk_SK.ISO8859-2',
  997.     'sk_sk.iso88592': 'sk_SK.ISO8859-2',
  998.     'sl': 'sl_SI.ISO8859-2',
  999.     'sl_cs': 'sl_CS.ISO8859-2',
  1000.     'sl_si': 'sl_SI.ISO8859-2',
  1001.     'sl_si.iso88592': 'sl_SI.ISO8859-2',
  1002.     'slovak': 'sk_SK.ISO8859-2',
  1003.     'slovene': 'sl_SI.ISO8859-2',
  1004.     'slovenian': 'sl_SI.ISO8859-2',
  1005.     'sp': 'sp_YU.ISO8859-5',
  1006.     'sp_yu': 'sp_YU.ISO8859-5',
  1007.     'spanish': 'es_ES.ISO8859-1',
  1008.     'spanish.iso88591': 'es_ES.ISO8859-1',
  1009.     'spanish_spain': 'es_ES.ISO8859-1',
  1010.     'spanish_spain.8859': 'es_ES.ISO8859-1',
  1011.     'sq': 'sq_AL.ISO8859-2',
  1012.     'sq_al': 'sq_AL.ISO8859-2',
  1013.     'sq_al.iso88592': 'sq_AL.ISO8859-2',
  1014.     'sr': 'sr_YU.ISO8859-5',
  1015.     'sr@cyrillic': 'sr_YU.ISO8859-5',
  1016.     'sr_sp': 'sr_SP.ISO8859-2',
  1017.     'sr_yu': 'sr_YU.ISO8859-5',
  1018.     'sr_yu.cp1251@cyrillic': 'sr_YU.CP1251',
  1019.     'sr_yu.iso88592': 'sr_YU.ISO8859-2',
  1020.     'sr_yu.iso88595': 'sr_YU.ISO8859-5',
  1021.     'sr_yu.iso88595@cyrillic': 'sr_YU.ISO8859-5',
  1022.     'sr_yu.microsoftcp1251@cyrillic': 'sr_YU.CP1251',
  1023.     'sr_yu.utf8@cyrillic': 'sr_YU.UTF-8',
  1024.     'sr_yu@cyrillic': 'sr_YU.ISO8859-5',
  1025.     'sv': 'sv_SE.ISO8859-1',
  1026.     'sv_fi': 'sv_FI.ISO8859-1',
  1027.     'sv_fi.iso88591': 'sv_FI.ISO8859-1',
  1028.     'sv_fi.iso885915': 'sv_FI.ISO8859-15',
  1029.     'sv_fi@euro': 'sv_FI.ISO8859-15',
  1030.     'sv_se': 'sv_SE.ISO8859-1',
  1031.     'sv_se.88591': 'sv_SE.ISO8859-1',
  1032.     'sv_se.iso88591': 'sv_SE.ISO8859-1',
  1033.     'sv_se.iso885915': 'sv_SE.ISO8859-15',
  1034.     'sv_se@euro': 'sv_SE.ISO8859-15',
  1035.     'swedish': 'sv_SE.ISO8859-1',
  1036.     'swedish.iso88591': 'sv_SE.ISO8859-1',
  1037.     'ta': 'ta_IN.TSCII-0',
  1038.     'ta_in': 'ta_IN.TSCII-0',
  1039.     'ta_in.tscii': 'ta_IN.TSCII-0',
  1040.     'ta_in.tscii0': 'ta_IN.TSCII-0',
  1041.     'tg': 'tg_TJ.KOI8-C',
  1042.     'tg_tj': 'tg_TJ.KOI8-C',
  1043.     'tg_tj.koi8c': 'tg_TJ.KOI8-C',
  1044.     'th': 'th_TH.ISO8859-11',
  1045.     'th_th': 'th_TH.ISO8859-11',
  1046.     'th_th.iso885911': 'th_TH.ISO8859-11',
  1047.     'th_th.tactis': 'th_TH.TIS620',
  1048.     'th_th.tis620': 'th_TH.TIS620',
  1049.     'thai': 'th_TH.ISO8859-11',
  1050.     'tl': 'tl_PH.ISO8859-1',
  1051.     'tl_ph': 'tl_PH.ISO8859-1',
  1052.     'tl_ph.iso88591': 'tl_PH.ISO8859-1',
  1053.     'tr': 'tr_TR.ISO8859-9',
  1054.     'tr_tr': 'tr_TR.ISO8859-9',
  1055.     'tr_tr.iso88599': 'tr_TR.ISO8859-9',
  1056.     'tt': 'tt_RU.TATAR-CYR',
  1057.     'tt_ru': 'tt_RU.TATAR-CYR',
  1058.     'tt_ru.koi8c': 'tt_RU.KOI8-C',
  1059.     'tt_ru.tatarcyr': 'tt_RU.TATAR-CYR',
  1060.     'turkish': 'tr_TR.ISO8859-9',
  1061.     'turkish.iso88599': 'tr_TR.ISO8859-9',
  1062.     'uk': 'uk_UA.KOI8-U',
  1063.     'uk_ua': 'uk_UA.KOI8-U',
  1064.     'uk_ua.cp1251': 'uk_UA.CP1251',
  1065.     'uk_ua.iso88595': 'uk_UA.ISO8859-5',
  1066.     'uk_ua.koi8u': 'uk_UA.KOI8-U',
  1067.     'uk_ua.microsoftcp1251': 'uk_UA.CP1251',
  1068.     'univ': 'en_US.utf',
  1069.     'universal': 'en_US.utf',
  1070.     'universal.utf8@ucs4': 'en_US.UTF-8',
  1071.     'ur': 'ur_PK.CP1256',
  1072.     'ur_pk': 'ur_PK.CP1256',
  1073.     'ur_pk.cp1256': 'ur_PK.CP1256',
  1074.     'ur_pk.microsoftcp1256': 'ur_PK.CP1256',
  1075.     'uz': 'uz_UZ.UTF-8',
  1076.     'uz_uz': 'uz_UZ.UTF-8',
  1077.     'vi': 'vi_VN.TCVN',
  1078.     'vi_vn': 'vi_VN.TCVN',
  1079.     'vi_vn.tcvn': 'vi_VN.TCVN',
  1080.     'vi_vn.tcvn5712': 'vi_VN.TCVN',
  1081.     'vi_vn.viscii': 'vi_VN.VISCII',
  1082.     'vi_vn.viscii111': 'vi_VN.VISCII',
  1083.     'wa': 'wa_BE.ISO8859-1',
  1084.     'wa_be': 'wa_BE.ISO8859-1',
  1085.     'wa_be.iso88591': 'wa_BE.ISO8859-1',
  1086.     'wa_be.iso885915': 'wa_BE.ISO8859-15',
  1087.     'wa_be@euro': 'wa_BE.ISO8859-15',
  1088.     'yi': 'yi_US.CP1255',
  1089.     'yi_us': 'yi_US.CP1255',
  1090.     'yi_us.cp1255': 'yi_US.CP1255',
  1091.     'yi_us.microsoftcp1255': 'yi_US.CP1255',
  1092.     'zh': 'zh_CN.eucCN',
  1093.     'zh_cn': 'zh_CN.gb2312',
  1094.     'zh_cn.big5': 'zh_TW.big5',
  1095.     'zh_cn.euc': 'zh_CN.eucCN',
  1096.     'zh_cn.gb18030': 'zh_CN.gb18030',
  1097.     'zh_cn.gb2312': 'zh_CN.gb2312',
  1098.     'zh_cn.gbk': 'zh_CN.gbk',
  1099.     'zh_hk': 'zh_HK.big5hkscs',
  1100.     'zh_hk.big5': 'zh_HK.big5',
  1101.     'zh_hk.big5hkscs': 'zh_HK.big5hkscs',
  1102.     'zh_tw': 'zh_TW.big5',
  1103.     'zh_tw.big5': 'zh_TW.big5',
  1104.     'zh_tw.euc': 'zh_TW.eucTW' }
  1105. windows_locale = {
  1106.     1078: 'af_ZA',
  1107.     1052: 'sq_AL',
  1108.     1025: 'ar_SA',
  1109.     2049: 'ar_IQ',
  1110.     3073: 'ar_EG',
  1111.     4097: 'ar_LY',
  1112.     5121: 'ar_DZ',
  1113.     6145: 'ar_MA',
  1114.     7169: 'ar_TN',
  1115.     8193: 'ar_OM',
  1116.     9217: 'ar_YE',
  1117.     10241: 'ar_SY',
  1118.     11265: 'ar_JO',
  1119.     12289: 'ar_LB',
  1120.     13313: 'ar_KW',
  1121.     14337: 'ar_AE',
  1122.     15361: 'ar_BH',
  1123.     16385: 'ar_QA',
  1124.     1067: 'hy_AM',
  1125.     1068: 'az_AZ',
  1126.     2092: 'az_AZ',
  1127.     1069: 'eu_ES',
  1128.     1059: 'be_BY',
  1129.     1093: 'bn_IN',
  1130.     8218: 'bs_BA',
  1131.     5146: 'bs_BA',
  1132.     1150: 'br_FR',
  1133.     1026: 'bg_BG',
  1134.     1027: 'ca_ES',
  1135.     4: 'zh_CHS',
  1136.     1028: 'zh_TW',
  1137.     2052: 'zh_CN',
  1138.     3076: 'zh_HK',
  1139.     4100: 'zh_SG',
  1140.     5124: 'zh_MO',
  1141.     31748: 'zh_CHT',
  1142.     1050: 'hr_HR',
  1143.     4122: 'hr_BA',
  1144.     1029: 'cs_CZ',
  1145.     1030: 'da_DK',
  1146.     1164: 'gbz_AF',
  1147.     1125: 'div_MV',
  1148.     1043: 'nl_NL',
  1149.     2067: 'nl_BE',
  1150.     1033: 'en_US',
  1151.     2057: 'en_GB',
  1152.     3081: 'en_AU',
  1153.     4105: 'en_CA',
  1154.     5129: 'en_NZ',
  1155.     6153: 'en_IE',
  1156.     7177: 'en_ZA',
  1157.     8201: 'en_JA',
  1158.     9225: 'en_CB',
  1159.     10249: 'en_BZ',
  1160.     11273: 'en_TT',
  1161.     12297: 'en_ZW',
  1162.     13321: 'en_PH',
  1163.     1061: 'et_EE',
  1164.     1080: 'fo_FO',
  1165.     1124: 'fil_PH',
  1166.     1035: 'fi_FI',
  1167.     1036: 'fr_FR',
  1168.     2060: 'fr_BE',
  1169.     3084: 'fr_CA',
  1170.     4108: 'fr_CH',
  1171.     5132: 'fr_LU',
  1172.     6156: 'fr_MC',
  1173.     1122: 'fy_NL',
  1174.     1110: 'gl_ES',
  1175.     1079: 'ka_GE',
  1176.     1031: 'de_DE',
  1177.     2055: 'de_CH',
  1178.     3079: 'de_AT',
  1179.     4103: 'de_LU',
  1180.     5127: 'de_LI',
  1181.     1032: 'el_GR',
  1182.     1095: 'gu_IN',
  1183.     1037: 'he_IL',
  1184.     1081: 'hi_IN',
  1185.     1038: 'hu_HU',
  1186.     1039: 'is_IS',
  1187.     1057: 'id_ID',
  1188.     1117: 'iu_CA',
  1189.     2141: 'iu_CA',
  1190.     2108: 'ga_IE',
  1191.     1076: 'xh_ZA',
  1192.     1077: 'zu_ZA',
  1193.     1040: 'it_IT',
  1194.     2064: 'it_CH',
  1195.     1041: 'ja_JP',
  1196.     1099: 'kn_IN',
  1197.     1087: 'kk_KZ',
  1198.     1111: 'kok_IN',
  1199.     1042: 'ko_KR',
  1200.     1088: 'ky_KG',
  1201.     1062: 'lv_LV',
  1202.     1063: 'lt_LT',
  1203.     1134: 'lb_LU',
  1204.     1071: 'mk_MK',
  1205.     1086: 'ms_MY',
  1206.     2110: 'ms_BN',
  1207.     1100: 'ml_IN',
  1208.     1082: 'mt_MT',
  1209.     1153: 'mi_NZ',
  1210.     1146: 'arn_CL',
  1211.     1102: 'mr_IN',
  1212.     1148: 'moh_CA',
  1213.     1104: 'mn_MN',
  1214.     1121: 'ne_NP',
  1215.     1044: 'nb_NO',
  1216.     2068: 'nn_NO',
  1217.     1154: 'oc_FR',
  1218.     1096: 'or_IN',
  1219.     1123: 'ps_AF',
  1220.     1065: 'fa_IR',
  1221.     1045: 'pl_PL',
  1222.     1046: 'pt_BR',
  1223.     2070: 'pt_PT',
  1224.     1094: 'pa_IN',
  1225.     1131: 'quz_BO',
  1226.     2155: 'quz_EC',
  1227.     3179: 'quz_PE',
  1228.     1048: 'ro_RO',
  1229.     1047: 'rm_CH',
  1230.     1049: 'ru_RU',
  1231.     9275: 'smn_FI',
  1232.     4155: 'smj_NO',
  1233.     5179: 'smj_SE',
  1234.     1083: 'se_NO',
  1235.     2107: 'se_SE',
  1236.     3131: 'se_FI',
  1237.     8251: 'sms_FI',
  1238.     6203: 'sma_NO',
  1239.     7227: 'sma_SE',
  1240.     1103: 'sa_IN',
  1241.     3098: 'sr_SP',
  1242.     7194: 'sr_BA',
  1243.     2074: 'sr_SP',
  1244.     6170: 'sr_BA',
  1245.     1132: 'ns_ZA',
  1246.     1074: 'tn_ZA',
  1247.     1051: 'sk_SK',
  1248.     1060: 'sl_SI',
  1249.     1034: 'es_ES',
  1250.     2058: 'es_MX',
  1251.     3082: 'es_ES',
  1252.     4106: 'es_GT',
  1253.     5130: 'es_CR',
  1254.     6154: 'es_PA',
  1255.     7178: 'es_DO',
  1256.     8202: 'es_VE',
  1257.     9226: 'es_CO',
  1258.     10250: 'es_PE',
  1259.     11274: 'es_AR',
  1260.     12298: 'es_EC',
  1261.     13322: 'es_CL',
  1262.     14346: 'es_UR',
  1263.     15370: 'es_PY',
  1264.     16394: 'es_BO',
  1265.     17418: 'es_SV',
  1266.     18442: 'es_HN',
  1267.     19466: 'es_NI',
  1268.     20490: 'es_PR',
  1269.     1089: 'sw_KE',
  1270.     1053: 'sv_SE',
  1271.     2077: 'sv_FI',
  1272.     1114: 'syr_SY',
  1273.     1097: 'ta_IN',
  1274.     1092: 'tt_RU',
  1275.     1098: 'te_IN',
  1276.     1054: 'th_TH',
  1277.     1055: 'tr_TR',
  1278.     1058: 'uk_UA',
  1279.     1056: 'ur_PK',
  1280.     2080: 'ur_IN',
  1281.     1091: 'uz_UZ',
  1282.     2115: 'uz_UZ',
  1283.     1066: 'vi_VN',
  1284.     1106: 'cy_GB' }
  1285.  
  1286. def _print_locale():
  1287.     categories = { }
  1288.     
  1289.     def _init_categories(categories = categories):
  1290.         for k, v in globals().items():
  1291.             if k[:3] == 'LC_':
  1292.                 categories[k] = v
  1293.                 continue
  1294.         
  1295.  
  1296.     _init_categories()
  1297.     del categories['LC_ALL']
  1298.     print 'Locale defaults as determined by getdefaultlocale():'
  1299.     print '-' * 72
  1300.     (lang, enc) = getdefaultlocale()
  1301.     print 'Language: ',
  1302.     if not lang:
  1303.         pass
  1304.     print '(undefined)'
  1305.     print 'Encoding: ',
  1306.     if not enc:
  1307.         pass
  1308.     print '(undefined)'
  1309.     print 
  1310.     print 'Locale settings on startup:'
  1311.     print '-' * 72
  1312.     for name, category in categories.items():
  1313.         print name, '...'
  1314.         (lang, enc) = getlocale(category)
  1315.         print '   Language: ',
  1316.         if not lang:
  1317.             pass
  1318.         print '(undefined)'
  1319.         print '   Encoding: ',
  1320.         if not enc:
  1321.             pass
  1322.         print '(undefined)'
  1323.         print 
  1324.     
  1325.     print 
  1326.     print 'Locale settings after calling resetlocale():'
  1327.     print '-' * 72
  1328.     resetlocale()
  1329.     for name, category in categories.items():
  1330.         print name, '...'
  1331.         (lang, enc) = getlocale(category)
  1332.         print '   Language: ',
  1333.         if not lang:
  1334.             pass
  1335.         print '(undefined)'
  1336.         print '   Encoding: ',
  1337.         if not enc:
  1338.             pass
  1339.         print '(undefined)'
  1340.         print 
  1341.     
  1342.     
  1343.     try:
  1344.         setlocale(LC_ALL, '')
  1345.     except:
  1346.         print 'NOTE:'
  1347.         print 'setlocale(LC_ALL, "") does not support the default locale'
  1348.         print 'given in the OS environment variables.'
  1349.  
  1350.     print 
  1351.     print 'Locale settings after calling setlocale(LC_ALL, ""):'
  1352.     print '-' * 72
  1353.     for name, category in categories.items():
  1354.         print name, '...'
  1355.         (lang, enc) = getlocale(category)
  1356.         print '   Language: ',
  1357.         if not lang:
  1358.             pass
  1359.         print '(undefined)'
  1360.         print '   Encoding: ',
  1361.         if not enc:
  1362.             pass
  1363.         print '(undefined)'
  1364.         print 
  1365.     
  1366.  
  1367.  
  1368. try:
  1369.     LC_MESSAGES
  1370. except NameError:
  1371.     pass
  1372.  
  1373. __all__.append('LC_MESSAGES')
  1374. if __name__ == '__main__':
  1375.     print 'Locale aliasing:'
  1376.     print 
  1377.     _print_locale()
  1378.     print 
  1379.     print 'Number formatting:'
  1380.     print 
  1381.     _test()
  1382.  
  1383.